package com.why.cachecloud.schedule.brevity;

import com.why.cachecloud.schedule.jobs.CacheBaseJob;
import org.quartz.JobExecutionContext;
import org.quartz.SchedulerContext;
import org.springframework.context.ApplicationContext;

/**
 * 1 0/1 * ? * *
 * DispatcherBrevityScheduleJob
 * 每分钟执行一次DispatcherBrevityScheduleJob
 * 1.获取前一分钟的时间(时间戳当作任务执行的版本)
 * 2.遍历所有的采集数据类型
 * 3.获取当前的时间判断分钟数是否满足收集时间点
 * 4.获取所有的任务，从brevity_schedule_resources中获取
 * 5.按批次(100)取出任务集合提交到异步线程池去执行
 * 5.1 根据任务ID集合更新任务的版本(时间戳)并获取更新结果集合
 * 5.2 循环更新集合，获取更新的结果，如果大于0就说明获取锁成功，根据type类型执行相应的操作比如慢日志
 * 5.3 根据ID获取实例的appid、host、port
 * 5.4 获取100条慢日志，转换为实例慢日志(包含了实例信息)
 * 5.5 提交到线程池异步批量写入数据库
 * Created by why.developer
 */
public class DispatcherBrevityScheduleJob extends CacheBaseJob {
    private static final long serialVersionUID = 2626836144949582163L;

    /**
     * 维护短频任务
     *
     * @param context
     */
    @Override
    public void action(JobExecutionContext context) {
        try {
            SchedulerContext schedulerContext = context.getScheduler().getContext();
            ApplicationContext applicationContext = (ApplicationContext) schedulerContext.get(APPLICATION_CONTEXT_KEY);
            BrevityScheduler brevityScheduler = applicationContext.getBean(BrevityScheduler.class);
            brevityScheduler.dispatcherTasks();
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }
    }
}
